package com.md01.controller;

import com.md01.entity.Book;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.xml.ws.RequestWrapper;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Controller
public class BookController {
    //CRUD
    @RequestMapping("/getString")
    @ResponseBody //返回值"index.jsp"
    private String t1() {

        return "index.jsp";

    }

    @RequestMapping("/getStr")
    @ResponseBody //这个注解是响应数据本身，不是视图，返回值“666”
    public String t2() {
        return "666";

    }

    // 如何响应一个对象 text/html;charset=utf-8 只能请求响应的乱码
    @RequestMapping(value = "getBook")
    @ResponseBody
    public Book getBook() {
        Book book = new Book(4, "苏菲亚");
        return book;// 如果想直接返回一个对象类型的数据 ，需要使用 json，jackson会自动将对象。转json，

    }

    @RequestMapping(value = "getBookList")
    @ResponseBody
    public List<Book> getBookList() {
        Book book = new Book(1, "一路向西1");
        Book book1 = new Book(2, "一路向西2");
        Book book2 = new Book(3, "一路向西3");
        Book book3 = new Book(4, "一路向西4");
        Book book4 = new Book(5, "一路向西5");
        List<Book> bookList = new ArrayList<Book>();
        bookList.add(book);
        bookList.add(book1);
        bookList.add(book2);
        bookList.add(book3);
        bookList.add(book4);

        return bookList;

    }

    // 方法的返回值 ，是响应的数据 ，而方法的形参就是请求的参数,要求，请求参数与形参名称一致
    //接受普通参数
    @RequestMapping(value = "t1", produces = "application/json;charset=utf-8")
    @ResponseBody
    public String testGet1(@RequestParam(value = "user", required = false, defaultValue = "老六") String username, int age) {  //user=libai&age=18
        System.out.println(username + "今年" + age + "岁了");
        return username + "今年" + age + "岁了";
    }

    //接受对象
    @RequestMapping("/getBook1")
    @ResponseBody
    public Book getBook2(Book book) {
        System.out.println("book=" + book);
        return book;

    }

    // 假设一个表单要提交用户的爱好hobby：唱歌，跳舞 ，游戏,就要求java系统 要接收一个数组，或集合
    @RequestMapping("/getArray")  // /getArray?hobby=唱歌&hobby=跳舞&hobby=游戏
    @ResponseBody
    public String[] getArray(String[] hobby){  // 用对象做形参时，只要请求参数名称，与对象的属性名一致即可。
        System.out.println("Arrays.asList(hobby) = " + Arrays.asList(hobby));
        return hobby;
    }

    // 如果对象数组呢？Book[]
    @RequestMapping("/getList")  // getList?list=111&list=222
    @ResponseBody
    public List<String> getList(@RequestParam  List<String> list){
        return list;
    }

    // 如果对象集合呢？List<Book> ，json格式来传递，js,ajax,axios
    @RequestMapping("/getListJson")  // getListJson ,通过js直接将整个js集合发送
    @ResponseBody
    public List<Book> getListJson(@RequestBody List<Book> list){ //@RequestBody 表示用json发送
        return list;
    }




}
